<?php

/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://www.workerman.net/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
error_reporting(E_ALL ^ E_NOTICE);
/**
 * 用于检测业务代码死循环或者长时间阻塞等问题
 * 如果发现业务卡死，可以将下面declare打开（去掉//注释），并执行php start.php reload
 * 然后观察一段时间workerman.log看是否有process_timeout异常
 */
//declare(ticks=1);
//header("Content-Type:text/html;charset=utf8");
use \GatewayWorker\Lib\Gateway;
require_once "play.php";
use xf\Play;
/**
 * 主逻辑
 * 主要是处理 onConnect onMessage onClose 三个方法
 * onConnect 和 onClose 如果不需要可以不用实现并删除
 */
class Events
{

    /**
     * 进程启动后初始化数据库连接
     */
    public static function onWorkerStart($businessWorker)
    {
        //官方异步客户端 body处慎用var_dump
        $http = new \Workerman\Http\Client();

        //业务代码
        $play = new Play();

        //只在id编号为0的进程上设置定时器。
        if ($businessWorker->id === 0) {
            //重启时将所有设备下线 可能会导致启动失败
            $http->get($play->url . '/api/awork/close_all', function ($response) {
                $body = $response->getBody();
                $res = json_decode($body, true);
                var_dump($res);

            }, function ($exception) {
                echo $exception;
            });
            var_dump("start 。。。。。。。。。。。。");
        }
    }
    /**
     * 当客户端连接时触发
     * 如果业务不需此回调可以删除onConnect
     *
     * @param int $client_id 连接id
     */
    public static function onConnect($client_id)
    {

    }

    /**
     * 当客户端发来消息时触发
     * @param int $client_id 连接id
     * @param mixed $message 具体消息
     */
    public static function onMessage($client_id, $message)
    {
        //直接插入临时数据
        var_dump("receive  message----");

        //官方异步客户端 body处慎用var_dump
        $http = new \Workerman\Http\Client();

        //业务代码
        $play = new Play();

        //接受到的消息
        $new_msg = json_decode($message, true);

        $http->post($play->url."/api/awork/new_ls_data", ['time'=>time(),'data'=>json_encode($new_msg)], function($response){
            $body = $response->getBody();
            $res = json_decode($body, true);
            var_dump($res);
        }, function($exception){
            echo $exception;
        });


        //来自web端和手机端的命令：
        if ($_SERVER['GATEWAY_PORT'] == $play->web_port) {
            $uid = Gateway::getUidByClientId($client_id);
            if(!$uid){
                Gateway::bindUid($client_id, 1);
                var_dump('bind_web');
            }
            Gateway::sendToUid(1,$message);
//            if($new_msg['type'] && $new_msg['type'] == 'ping'){
//                Gateway::sendToUid(1,$message);
//            }else{
//
//                //uid 是web端，手机端发送的一个写死的uid
//                $uid = Gateway::getUidByClientId($client_id);
//                if(!$uid){
//                    Gateway::bindUid($client_id, $new_msg['uid']);
//                    var_dump('bind_web');
//                }
//
//                // 发送命令道指定大棚
//                Gateway::sendToUid($new_msg['gateway_id'], json_encode($new_msg['data']));
//
//                //  发送命令到web和手机端
//                Gateway::sendToUid($new_msg['uid'], 'success');
//            }

        }


        //大棚硬件发来的消息
        if($_SERVER['GATEWAY_PORT'] == $play->dap_port){

            //绑定uid
            $uid = Gateway::getUidByClientId($client_id);
            if (!$uid) {
                Gateway::bindUid($client_id, $new_msg['gateway_id']);
                var_dump('bind_dapeng');
            }

            switch ($new_msg['type']){

                case 5:
                    //设备状态数据上传
                    Gateway::sendToClient($client_id,"case 5555555555555555");
                case 3:
                    //设备定时上传数据
                    $http->post($play->url."/api/awork/dev_msg", ['data'=>$message], function($response){
                        $body = $response->getBody();
                        $res = json_decode($body, true);
                        var_dump($res);
                    }, function($exception){
                        echo $exception;
                    });
                case 'ping':
                    //设备状态数据上传
                    Gateway::sendToClient($client_id,json_encode($new_msg));
            }
        }
    }

    /**
     * 当用户断开连接时触发
     * @param int $client_id 连接id
     */
    public static function onClose($client_id)
    {
        var_dump($client_id . "logout");
    }
}
